나의 프로그래밍 개인사
- 2025-06-01 (modified: 2025-06-03)
스스로 기억하기 위해 남겨두는 기록. (기억을 더듬고 관련 기록을 검색하며 계속 갱신하는 중)
1985년 이전
초등학교 입학 전.
아직 컴퓨터라는 게 있는 줄 몰랐다. 오락실에서 게임을 한 경험이 컴퓨터를 (그게 컴퓨터인줄도 모르고) 이용한 첫 경험이다.
당시 서울 성북구 안암동에 살았고 친형(나보다 3살 위)과 사촌형(나보다 4살 위)이 오락실을 가면 따라다녔다. 한 판에 50원이었던 것 같다.
- 제비우스라는 게임을 주로 했다(종스크롤 슈팅, 1983년에 남코에서 출시). 사촌형이 스틱으로 조종을 하고(제일 재밌는 역할), 친형은 총알 버튼을 눌렀고(제일 힘든 역할), 나는 폭탄 버튼을 담당했다(제일 지루한 역할).
- 팩맨도 했었다. 당시엔 전혀 몰랐지만 나중에(20대 후반) 게임 기획 공부를 하면서 팩맨 유령 캐릭터들의 움직임이 색깔별로 다르다는 걸 알게 됐다.
사촌형네 집은 가방 공장을 했었고 그나마 경제적으로 여유가 있는 편이었다. 사촌형네 집에는 재믹스라는 MSX 기반 게임기가 있었고, 요술나무나 남극탐험 같은 게임을 했다.
휴대용 VR 게임기도 있었는데 아주 신기하고 부러웠다. 나중에 찾아보니 Tomytronic Planet Zeon이었다. Tomy에서 1983년에 출시. 조악한 LED 화면으로 3D 표현을 잘 구현했다(참고 영상).
1986년
초등학교 1학년.
보호자가 바뀌면서 갑자기 부자 동네(서울 성북구 장위동에 있던 부촌)의 좋은 집으로 이사를 갔다. 이사 가기 전에 사촌형이 휴대용 팩맨 게임기를 선물해주었다. 찾아보니 1981년 Tomy에서 출시한 Tomytronic Pac Man이었다. 밤에 종종 이불 뒤집어 쓰고 친형이랑 재밌게 했다.
데이콤(현 LG유플러스)의 PC 통신 서비스인 천리안이 1986년에 서비스를 시작했다고 한다.
1987년
초등학교 2학년.
재믹스 게임기를 샀다. 컴퓨터를 샀으면 좋았을텐데 아직 컴퓨터가 뭔지 몰랐다. 재믹스에는 MSX 용 카트리지를 꽂을 수 있었는데 몽땅 게임 뿐이었다.
- 자낙이라는 게임을 재미있게 했다. 자낙은 컴파일이라는 일본의 회사에서 1986년에 개발한 게임인데 동적 난이도 조정(DDA)이 구현되어 있었다. 측면 패널에 “ALC”라는 이름으로 수치화된 난이도 수준이 표시됐는데 이 수치를 봐가면서 플레이를 하는 식으로 난이도 해킹을 했었다. 덕분에 나중에 기획자로 일을 할 때, “어떤 시스템 상태는 사용자에게 숨기는 게 좋을 수 있다”는 사실을 종종 상기할 수 있었다. 나중에 The art of game design을 읽을 때 관련된 이야기가 나와서 반가웠다.
- 마성전설도 재미있었다. 코나미에서 1986년에 출시한 게임. 열심히 했지만 끝판왕을 보지는 못했다.
게임을 너무 많이 해서 보호자가 조이스틱을 감춰놓곤 했었다. 조이스틱이 없어도 게임 콘솔의 단자를 가위 같은 전도체로 잘 접지하면 신호를 보낼 수 있었는데 게임을 즐길 수 있을 정도는 아니었다. 그때 내게 좀 더 집념이나 끈기가 있었다면 수제 조이스틱을 만들 수도 있었을텐데 아쉽다.
1988년
초등학교 3학년.
형 친구의 어머니가 동네(서울시 성북구 장위동)에 “베데스 컴퓨터 학원”을 차리셨고 형이 그 학원에 다녔다. 학원은 창문여고에서 장위동으로 올라오는 언덕 꼭대기 즈음에 있었다. 거기를 지나서 언덕을 내려가면 “동방 컴퓨터 학원”이 있었다.
형이 학원에서 MSX-BASIC(Microsoft Extended BASIC)을 배워와서 나에게 가르쳐줬다. 집에는 컴퓨터가 없으므로 공책에 코딩을 했고 형이 머리로 실행을 해줬다. 종이에 실물 크기로 인쇄된 키보드(어느 컴퓨터 잡지의 별책부록이었다)를 책상 위에 올려놓고 타자 연습도 했다. 주말에는 학원을 개방하기 때문에 형을 따라 놀러가서 실습을 해볼 수 있었다.
당시에 학원에 있던 MSX 컴퓨터에는 기록용 장치가 없었고 ROM 밖에 없었다. 게임이 담긴 카트리지(당시에는 “롬팩”이라고 불렀다)를 꽂고 부팅하면 게임이 실행됐고, 그냥 부팅하면 MSX-BASIC이 실행됐다. 시스템의 ROM에 탑재된 베이직이라서 롬베이직(ROM Basic)이라는 별칭으로도 불렀는데 한국에서만 그렇게 불렀는지도 모르겠다. 코딩을 해도 저장을 하지 못하니 짧은 베이직 코드 몇 개를 외우고 다니면서 반복해서 입력하곤 했는데, 보는 사람들이 신기해했던 내 개인기 중 하나였다. 몇 년 뒤에 친구네 집에서 카세트 테이프 기반 저장 장치가 달린 SPC-1000(Samsung Personal Computer)을 보고 매우 신기해했던 기억이 난다.
88년 당시 학원에는 Apple II와 MSX가 있었는데 나는 MSX를 좋아했다. 아마 MSX는 화면이 컬러였고 3중 화음의 합성 음악 재생을 지원(PLAY
명령에 인자를 세 개까지 줄 수 있었다)했던 반면, Apple II는 단색이었기 때문이었을 것 같다.
형이 처음으로 풀어보라고 준 문제는 *
문자로 직각삼각형을 출력하는 문제였는데 나는 이렇게 풀었다:
10 PRINT "*"
20 PRINT "**"
30 PRINT "***"
반복문을 썼어야 했는데 나는 아직 반복문을 배우기 전이었다. 형이 아주 잘 풀었다고 칭찬을 한 덕에 프로그래밍에 소질이 있다고 믿게 됐다. 당시에 형이 칭찬을 안했더라면 인생이 크게 달라졌을지도 모른다.
처음에 프로그래밍을 배울 때 변수와 상수의 구분이 매우 어려웠던 게 아직도 기억난다. a = a + 1
처럼 어떤 변수가 자기 자신의 값을 참조해서 스스로의 값을 갱신하는 패턴을 보면서도 아주 놀랐던 기억이 난다. 이런 기억들로 이루어보건데, 애초에 순수 함수형 언어를 배웠으면 좋았겠다는 생각이 든다. 함수형 언어가 반직관적이라는 주장은 사실이 아닐 가능성이 높다. 제프 래스킨이 The humane interface에서 사람들이 ‘자신에게 익숙하다’라는 개념을 ‘직관적이다’라고 잘못 표현하곤 한다며 지적했던 게 생각난다.
분기문이나 반복문을 배우기 전에 GOTO
문을 먼저 배웠다. 다익스트라의 에세이 “Go to statement considered harmful”이 1968년에 나왔으니 이미 20년이나 지난 시점임에도 불구하고 당시에 아무도 GOTO 문을 지양하라는 말을 안해줬다. 당시 MSX-BASIC에도 GOSUB
과 RETURN
이 있었으니 사실상 GOTO
는 가르칠 필요가 없었다참고로 GOSUB
과 RETURN
은 서브루틴을 지원하기 위한 명령어인데, MSX-BASIC에서의 서브루틴이란 1) 지역변수, 2) 인자, 3) 리턴값이 없는 함수이다.
ASCII 아트로 무한히 높은 아파트를 그리는 프로그램을 만들었던 게 기억에 남는다. 무한히 높게 하고 싶지는 않았지만 GOTO
밖에 모르니 달리 방법이 없었다.
10 PRINT " /-------------\ "
20 PRINT "/ \"
30 PRINT "+-+-----------+-+"
40 PRINT " | | "
50 PRINT " | | "
60 PRINT " +-----------+ "
70 GOTO 40
당시 컴퓨터 책에서는 키보드를 “건반”, 파일 디스크립터(file descriptor)는 “화일 기술자”, 매핑(mapping)은 “사상” 등으로 번역했었다. “기술자”가 무엇인지, “사상”이 무엇인지 도무지 알 수 없었는데 아무튼 꾸역꾸역 읽었고 일부만 이해했다. 주변에 물어볼 사람도 없었고 웹도 없었고 PC 통신은 있었을 시절이지만 집에 컴퓨터가 없었을 뿐 아니라 PC 통신이라는 게 있다는 사실조차 몰랐다.
그 밖에도 MSX-BASIC에서 POKE 851, 1
을 하면 한글 모아쓰기 기능이 켜지고 POKE 851, 0
을 하면 꺼진다는 게 기억난다. 메모리 오프셋 851 번지에 1 또는 0을 써 넣으라는 명령인데, 당시에는 무슨 뜻인지 전혀 모르고 그냥 외워서 사용했다.
서울에 살았던 점, 형 친구의 부모님이 컴퓨터 학원을 차린 덕에 컴퓨터를 접할 수 있었던 점 등은 운이 좋았다. 하지만 미국이 아닌 한국에 태어났던 점, 보호자가 모두 초등학교 중퇴였고 교육열이 낮았던 점 등은 운이 나빴다.
친구 손OO이 전학을 왔다. 친구 집에 자주 놀러가는 바람에 동생 손OO과도 친해졌다.
1989년
초등학교 4학년.
이 시기에 동네 컴퓨터 학원 컴퓨터들이 8비트에서 16비트로 바뀌었다. 당시에 16비트 컴퓨터가 국가 표준으로 정해졌기 때문일텐데(노태우 대통령 재임기) 그땐 전혀 몰랐다. 그냥 켜기만 하면 BASIC이 실행됐고 컬러 화면이었으며 3중 화음을 플레이할 수 있었던 MSX와 달리, 디스켓을 넣지 않으면 아무 것도 할 수 없었고 단색 화면이었으며 조악한 삑(beep) 소리 밖에 안나는(물론 주파수 조절은 가능) 등 첫인상이 안좋았다.
처음 만들어진 플로피 디스켓은 8인치였다고 하는데 나는 본 적이 없고(1960년대), 내가 처음 써본 디스켓은 5.25인치 미니 플로피 디스켓이었다. 플라스틱 재질의 사각형 포장 안에 기록용 마그네틱 원판이 들어 있는 형태인데 심하게 휘거나 잘못 보관하면 데이터가 쉽게 유실됐다. 용량은 보통 360KB였다.
컴퓨터의 메인 메모리는 512KB 또는 640KB였다. 몇몇 게임은 640KB에서만 실행이 됐었다. 현재(2025년) 내 맥북 에어의 (통합)메모리는 32GB니까 약 6만배 차이다.
MS-DOS 버전이 3.3이었다. MS-DOS에서 쓰던 쉘은 COMMAND.COM
이었다. 다른 명령을 실행하면 쉘이 메모리에서 내려가고, 프로그램 실행이 종료되면 다시 COMMAND.COM
이 실행되는 방식으로 메모리를 절약했다.
곧 PC Tools 라는 유틸리티 모음에 푹 빠졌었다. 게임의 저장 파일을 수정해서 일종의 “해킹”을 할 수 있었고, 디스크 조각 모음도 할 수 있었. 나중에는 피터 노턴의 Norton Utilities라는 제품이 대세가 됐는데 이 당시에 (적어도 우리 동네에서는) PC Tools가 대세였다.
친구 손OO이 컴퓨터를 사려고 하는데 “아프로만”이라는 회사에서 파는 애플 호환 기종을 살지, 8086 계열을 살지 내게 물어봤었다. 나는 당시에 8086이 좋다고 생각했고 컴퓨터를 사는 친구에게 질투가 나서 일부러 아프로만을 추천했었다. 근데 8086을 사더라. 배가 아팠다.
친구는 고에이 삼국지 게임을 좋아했다. 당시에 대유행이었는데 나는 한번도 안해봤다. 친구의 어머니는 중학교 영어 선생님이셨고 영어로 된 게임을 할 때 해석을 도와주셨다. 나는 프로그래밍을 배운 덕에 알파벳에는 익숙했던 편이었고, 더듬더듬 뭘 읽기는 읽었는데 뜻은 잘 몰랐다. 당시에 어느 게임에 “Mystery”라는 단어가 나왔는데 나는 “미스터 리”라고 잘못 해석했고 친구 어머니가 바로잡아 주셨다.
친구 손OO이랑 “동방 컴퓨터 학원”에 놀러가서 당시에 대유행이었던 테트리스를 처음 해봤다. 동방 컴퓨터 학원은 형이 다니던 베데스 컴퓨터 학원에서 언덕 아래쪽으로 내려가면 있었다. 89년인지 90년인지 확실치 않다. 그 학원에 왜 놀러 갔는지도 잘 모르겠다. 테트리스만 기억이 난다. 당시에 친구는 게임 규칙을 잘 몰라서 “나는 벌써 다 쌓았는데 너는 왜 여태 하고 있어?”하며 놀려서 어이가 없었다.
당시에 예루살렘 바이러스라는 컴퓨터 바이러스가 대유행이었다. “공산국가 소련에서 만든 게임인 테트리스를 통해 바이러스가 전파된다”는 뉴스를 봤었는데 그 덕에 반공정신이 투철해졌는지 아닌지는 잘 모르겠고 훗날 20대의 나는 마르크스의 책들을 재밌게 읽었다.
의사이자 해커였던 안철수씨가 예루살렘 바이러스 치료 기능이 있는 V2 PLUS 백신을 개발해서 무료로 공개했다. V2 PLUS는 V3의 전신이다. 안철수씨는 컴퓨터 애호가들 사이에서 영웅 같은 존재였다. 약 20년 뒤인 2011년 서울시장 보궐선거 당시 안철수씨가 박원순 당시 후보와 단일화를 하며 소위 ‘아름다운 양보’를 했을 때 안철수씨에게 무척 큰 존경심을 품었던 기억이 난다. 물론 존경심은 순식간에 실망으로 바뀌었다.
1990년
초등학교 5학년.
바로 뒷집에는 재은이형(형 친구)이 살았는데 우리집보다 더 잘 살았다. 아버지가 어느 은행의 지점장이라고 했던 것 같다. 재은이형은 워드프로세스 전용 기계가 있었다. 프린터기와 컴퓨터 본체와 작은 모니터가 합쳐진 형태. 나는 직접 보지는 못했고 전해만 들었는데 무척 부러웠다.
재은이형 집에 있는 컴퓨터는 컬러 모니터였고 하드 디스크라는 게 있어서 디스켓을 넣지 않아도 부팅이 된다며 형이 자랑하듯 얘기를 해줬다. 너무나 신기했다. 나중에 결국 재은이형네 집에 놀러가서 구경을 했는데 과연 놀라웠다. 디스켓도 없이 컴퓨터가 켜졌으며 부팅 속도는 엄청나가 빨랐고 부팅이 끝나면 Norton Utilities의 NCD 프로그램(일종의 탐색기)가 자동으로 실행됐다(AUTOEXEC.BAT
).
그 전까지 내가 봤던 모든 16비트 컴퓨터는 허큘리스 그래픽스 카드에 연결된 단색 모니터였다(녹색이거나 흰색이거나 주황색). 재은이형네 컴퓨터에는 VGA 카드가 있었을 것이다. 한편, VGA 카드의 해상도는 허큘리스보다 더 낮았는데, 컬러 모니터는 RGB 서브픽셀이 필요했기 때문이었을 것 같다.
이 시기엔 허큘리스 그래픽 카드의 메모리와 포트를 직접 제어해서 다양한 효과를 만들어내는 방법들을 공부했다. 그래픽 카드 메모리를 집적 수정하면 화면을 빠르게 갱신할 수 있었고, 모니터 주사선의 시작 위치를 바꾸면 CPU를 쓰지 않고도 화면 전체를 빠르게 흔들어서 ‘지진 효과’를 낼 수 있었다. 요즘은 1 바이트가 하나의 서브픽셀에 대응되기 때문에 계산이 쉬운 편이었는데, 허큘리스의 그래픽 모드에서는 1 비트가 하나의 픽셀에 대응됐기 때문에 비트 연산을 많이 써야했다. 이 시기 즈음에 2진수 및 비트 연산이랑 많이 친해진 것 같다. 덕분에 지금도 2진수를 (십진수만큼은 아니지만) 제법 직관적으로 읽고 쓸 수 있는데, 아주 가끔 유용하다.
참고로 허큘리스 그래픽 카드의 텍스트 모드는 한 줄에 80개 글자를 표현할 수 있었다. “한 줄에 80 글자”는 타자기 시대부터 이어지는 유구한 전통이었다. 대부분의 타자기에서 한 줄에 표현할 수 있는 글자는 대략 70~90자 사이였고, IBM의 천공카드도 80자, 포트란 코딩 용지도 80자 등. (나는 천공카드나 포트란 코딩 용지를 직접 본 적이 없다.)
어느날 형이 월간지 “컴퓨터주니어” 창간호(1990년 4월호)를 사왔다. 당시엔 월간 “컴퓨터학습”이라는 잡지도 있었는데 이름을 “마이컴”으로 바꿨더랬다. 월간 “마이크로소프트웨어”도 이미 있었다. 찾아보니 1983년에 창간했다고 한다.
드디어 나도 베데스 컴퓨터 학원에 등록했다.
학원에서는 이제 MSX-BASIC 대신 GW-BASIC을 가르쳤는데 나는 이미 익숙했고 대학생 강사 선생님은 프로그래밍을 잘 할줄 몰라서 난 주로 자습을 했다. 집에 컴퓨터가 없었던 나는 학원에만 가면 컴퓨터를 마음껏 쓸 수 있어서 행복했다. 그 밖에는 HWP, Dr.Halo 등 프로그램 사용법을 배웠다. Dr.Halo는 당시에 모두들 “닥터 할로”라고 불렀는데 사실은 “Draw Halo”라고 한다.
내가 간단한 게임을 만들면 강사 선생님이 복사해가서 자기가 만든 척을 했고, 이런저런 기능을 추가해달라며 요청했더랬다. 어느 날인가 강사 선생님에게 C 언어를 배우고 싶다고 했더니 “C 언어는 컴파일이라는 걸 해야하는데 그걸 한 번 하려면 디스켓을 수십장 갈아끼우면서 몇 시간씩 고생을 해야한다”며 배우지 말라고 했다. 물론 뻥이었다. 그때 배웠어야 했는데. 당시에 Turbo C 2.0이 있었던 걸로 기억한다.
같은 학원에 다니던 영춘이형(성은 모른다)이 용산 혹은 세운상가에서 불법복제 게임을 종종 구해왔다. 어떤 게임은 나에게도 복제해줬고 어떤 게임은 절대 복제를 안해주고 혼자만 했다. 당시에는 학원에서 쓰는 소프트웨어는 모두 불법복제였고 소프트웨어를 사야한다는 개념 자체가 희미했다.
광화문 교보문고에 전시된 대우 X2 컴퓨터를 봤다. 너무 갖고 싶었지만 사달라는 말도 못해봤다. 그런데 돌이켜보니 시대에 맞지 않게 8비트 컴퓨터였다. 왜 사고 싶었는지 모르겠다. 검정색 외관이 멋있어서? 당시 단색 모니터였던 16비트 컴퓨터보다 화려해서? 게임이 많아서?
당시에는 SimCity(1989년 출시)를 즐겨했다. 나중에는 게임에 숙달되어 언제나 게임 내 여론조사 지지도 100%를 달성하곤 했다. 20대 중반에야 알게 된 일인데, SimCity를 개발한 Will Wright는 당시에 크리스토퍼 알렉산더의 도시 설계 이론에 영향을 받았다고 한다. 알렉산더의 이론은 그 시기에 개발자들 사이에 알려지기 시작했으며 훗날 디자인 패턴, 애자일 방법론 등으로 이어진다.
페르시아의 왕자도 참 재미있게 했다(1989년 출시). 캐릭터의 부드러운 동작이 눈에 띄었는데 나중에 알고보니(The Making of Prince of Persia) 일종의 모션 캡쳐를 한 것이었다. 대단한 사람들.
당시 대항해시대도 유행이었는데 난 하지 않았다. 이 게임을 했던 친구들은 다들 세계지리에 빠삭했다. 나도 했으면 좋았을텐데 아쉽다.
이 시기 즈음에 Game Wizard라는 램상주 프로그램을 썼다. 예를 들어 게임 내에서 골드를 조작하고 싶으면 이렇게 한다:
- 게임을 하기 전에 게임 위저드를 먼저 메모리에 띄워 놓는다.
- 원하는 게임을 실행한다.
- 단축키를 눌러서 게임 위저드를 불러낸다.
- 내가 지금 가진 골드가 얼마인지 입력한다. (예: 1500)
- 게임으로 돌아가서 골드를 일부 소진한다.
- 다시 단축키를 눌러서 게임 위저드를 불러낸다.
- 내가 지금 가진 골드가 얼마인지 입력한다. (예: 1400)
- 게임 위저드가 원래는 “1500”이었다가 “1400”으로 바뀐 메모리 영역을 찾아준다.
- 해당 영역의 값을 변경한뒤 게임으로 돌아간다.
- 조작 성공
조작을 하면 게임의 재미가 급감한다는 사실을 깨달았다. 과정에 담긴 가치가 사라지기 때문.
1991년
초등학교 6학년.
당시 초등학교 정규 교육 과정에는 영어가 없었는데 담임 선생님이 가끔 영어를 가르쳐주었고 크리스마스 캐롤 같은 걸 알려주기도 했다. 돌이켜보니 이것도 프로그래밍 공부에 긍정적으로 작용한 운 좋았던 경험이 아니었나 싶다. 담임 선생님을 참 좋아했었는데 돌이켜보니 여학생들 성추행을 했던 것 같다. 양쪽 겨드랑이를 꼬집으며 몸을 밀착시키는 등. 종종 술냄새가 났고, 눈이 충혈된 날이 많았으며, 셔츠 사이로 곱슬곱슬한 털이 종종 삐져나왔던 게 기억에 남는다.
MS-DOS 5.0이 나왔다. MS-DOS 3.3과 5.0 등은 기억이 나는데 4.0은 쓴 기억이 나질 않길래 나중에 찾아보니 4.x는 멀티테스킹 등을 지원하는 좀 실험적인 브랜치였다고 한다.
MS-DOS 5.0에는 EDIT라는 풀스크린 텍스트 편집기와 QBasic이라는 IDE가 번들로 들어 있었다. 나중에 알고보니 EDIT은 별도 프로그램이 아니라 QBasic의 “텍스트 편집 모드”였다(QBASIC /EDITOR
명령).
QBasic은 QuickBASIC의 맛보기 버전 같은 느낌이었고, QuickBASIC과 달리 컴파일이 되지는 않았다. 나는 이미 QuickBASIC 4.5를 쓰고 있었는데 언제부터 쓰기 시작했는지 기억이 나지 않는다. 찾아보니 QuickBASIC 4.5는 1988년에 출시되었다고 한다. 당시에 나는 분명 MSX-BASIC을 배우고 있었으니 1989년에서 1991년 사이 어느 시점이었던 것 같다.
QBasic의 예제 프로그램 중 GORILLA.BAS
라는 게 있었다. 고릴라가 바나나 던지는 게임이었는데 속도 벡터로부터 X, Y 성분을 얻어내기 위해 삼각함수(COS
, SIN
)를 쓰고 있었다. 당시에는 전혀 이해할 수 없는 마법 같은 코드로 보였다. 이 때 누가 옆에서 조금만 거들어줬으면 좋았을텐데 참 아쉽다.
당시에 주변에서는 주로 Mdir을 썼는데 나는 LS를 썼다. MDIR.EXE
에 비해 LS.COM
은 기능이 부족하고 덜 예뻤지만, 작고 빨랐다.
이 시기(1991년 2월)에 파이썬 첫 버전이 릴리즈됐지만 나는 전혀 모르고 있었다. 내가 파이썬을 처음 접한 건 10년 뒤인 2001년에 노스모크라는 위키 기반 커뮤니티를 통해서였다. 노스모크는 모인모인이라는 파이썬 기반 위키 엔진으로 구현되어 있었다.
1992년
중학교 1학년. 서울 남대문중학교.
특별활동반으로 컴퓨터반을 선택했다. 미술 선생님이 소질이 있다며 미술반으로 옮겨보지 않겠냐고 제안했었다. 사실은 소질이 있었던 게 아니라 초등학교 때 미술학원을 잠깐 다닌 적이 있었기 때문일 것 같다. 기분은 좋았지만 컴퓨터가 더 좋았기 때문에 컴퓨터반에 남았다.
당시 집안 형편이 매우 어려웠다. 하루 용돈은 100원이었고(오락실에 가기에는 너무 부족한 용돈이었기 때문에 종종 돼지저금통에서 동전을 훔치곤 했다) 집에는 당연히 아직도 컴퓨터가 없었고 학원도 다니지 못했다. 주중에는 공책에 코딩을 했고 주말마다 버스를 타고 영풍문고에 가서 서점 지하에 전시된 컴퓨터로 실습을 했다. 매장에 전시된 컴퓨터가 두 대 뿐이라 컴퓨터를 차지하려면 오픈런을 해야 했다.
서점에 있는 BASIC 관련 책은 몽땅 읽었다. 책이 몇 권 있지도 않았고 읽어봐도 별 새로운 내용이 없었다. 베이직 공부가 아니라 컴퓨터 아키텍쳐, 자료구조, 알고리즘, 이산수학 등을 공부했으면 좋았을텐데 참 아쉽다. 주변에 조언을 해줄 사람도 없었다. 컴퓨터를 하는 친구들도 게임은 좋아했지만 프로그래밍을 좋아하는 친구는 없었다.
게임 개발을 하고 싶어서 모눈종이에 점을 찍고 이를 계산하여 폰트나 캐릭터 스프라이트 등을 만들며 놀았다. XOR의 역함수는 XOR이라는 점을 이용하여 커서를 효율적으로 표현하는 방법, Bresenham algorithm으로 선을 빠르게 그리는 방법 등을 컴퓨터 그래픽스 관련 트릭들을 몇 개 발견했는데 나중에 알고보니 다 이미 널리 알려진 방법들이었다. 그래도 스스로 발견했던 게 뿌듯하다.
친구네 집에서 남북전쟁, 램페이지, 원숭이 섬의 비밀 등을 하며 놀았다. 오락실에서는 주로 스트리트 파이터 2를 했다. 플레이를 “얍삽하게” 한다며 모르는 형한테 뺨을 맞은 기억이 있다. 내가 생각해도 얍삽했다.
1993년
중학교 2학년.
컴퓨터반(특별활동반)에서 광운대학교 컴퓨터실에 견학을 갔었다. 남대문중학교는 광운학원에 속한 학교였기 때문. 다른 건 기억이 안나고 가서 몰래 레밍즈를 하고 놀았던 기억만 난다(1991년 출시). 광화문 교보 빌딩에 있는 어느 회사(아마 교보생명?) 전산실에도 견학을 갔었다. 거대한 마그네틱 테입 장치를 봤던 기억이 난다.
이 즈음 집안 사정이 약간 나아져서(집안 사정이 자꾸 급격히 변하는 이유는 보호자가 종종 바뀌었기 때문) 드디어 컴퓨터가 생겼다. 80386DX. 사운드 블라스터 카드가 있었고, 마우스를 처음 써봤다. 바닥에 트랙볼이 있는 볼마우스였다.
사운드 블라스터는 당시 제이씨현이라는 회사에서 수입하여 판매하고 있었다. 경쟁 제품으로는 국산 사운드 카드인 옥소리가 있었다. 옥소리는 호환성이 떨어진다는 얘기를 여기저기서 들어서 사운드 블라스터를 샀다. 사운드 카드의 IRQ 및 DMA 설정을 맞추는 등 컴퓨터를 이리저리 세팅하느라 공부가 제법 되었다.
제이씨현은 자체적으로 만든 GUI 프로그램도 함께 제공했었다. 대화상자를 닫으려면 “확인” 버튼을 눌러야 했는데 당시에 “확인”이라는 레이블을 처음 봤기 때문에 왜 “확인”인지, 나에게 뭐를 “확인”하라는 것인지, 컴퓨터가 뭐를 “확인”하겠다는 것인지 의아하게 여겼더랬다. 대화상자는 말 그대로 컴퓨터랑 사용자가 대화를 나누는 상자(dialog box)다. 컴퓨터가 사용자에게 무언가 말을 걸고 사용자가 “네, 확인했습니다”라고 대답하는 절차를 흉내낸 UI다. “네, 확인했습니다”는 너무 길기 때문에 “확인”으로 줄였을텐데, 영어 “Okay” 또는 “OK”에 비해 “확인”은 지나치게 모호한 것 같다. 2000년대 이후 몇몇 UI 가이드라인들은 “네”, “아니오”, “확인”, “취소” 등 모호한 버튼 대신에 좀 더 설명적인 버튼(예: “네, 삭제하겠습니다”)을 권장하고 있다.
이 시기에 돈암동에 있는 컴퓨터 학원에도 등록했다. 상업고등학교에 다니는 누나들이 많았다. 학원에서는 주로 Lotus 1-2-3을 배웠다. 어쩌면 여성은 상고를 졸업하고 경리로 일하다가 시집가는 게 표준 코스 중 하나였기 때문일까 싶다. 근데 나는 Lotus 1-2-3이 재미가 없었다. 그때는 컴퓨터로 할 수 있는 진짜 작업은 오로지 프로그래밍 밖에 없고 나머지는 다 하찮게 보는 편견에 빠져있었다.
학교에 프로그래밍을 할 줄 아는 사람이 없어서 학교 대표로 정보 올림피아드 지역 예선에 출전했었다. 컴퓨터를 아버지 차에 실어서 선린상고(현재 선린인터넷고등학교)에 갔던 것 같다. 컴퓨터를 왜 가져갔지? 원래 그런거였나? 아무튼 가져갔고, 성적은 좋지 못했다. 올림피아드가 뭐하는건지 전혀 몰랐고 아무런 준비도 안했었다. 당시에 ‘컴퓨터 대회라더니 왜 수학 문제 같은 걸 내는거지?‘라는 불만을 품었었다. 당시엔 프로그래밍과 수학의 관련성을 잘 모르고 있었다. 돌이켜보면 많이 아쉽다.
인포북에서 나온 “매크로어셈블러 바이블”을 보며 MASM을 공부했었다. 93년인지 94년인지 확실치 않다. 어셈블리 언어에 대한 책인데 놀랍게도 OOP도 다루고 있었다.
PC 통신 게시판에서 DOOM 쉐어웨어 버전을 다운로드 받아서 처음 플레이해봤다. 386 컴퓨터에서도 렌더링 디테일 수준을 낮추고 화면 크기를 좀 줄이면 그럭저럭 플레이할 수 있었다. 대단한 충격을 받았다. 페르시아의 왕자 2를 재밌게 했었다.
PC 통신을 열심히 했고 전화 요금이 많이 나왔다. 처음에는 사설 BBS에 돌아다니다가 무료로 운영되는 인포서브, 신천지 등을 이용했다. 참고로 신천지는 이만희의 신천지가 아니라 증산도라는 종교 단체에서 운영하는 서비스였다. 01410
에 접속한 뒤 jsd
(증산도?)를 입력하면 접속할 수 있었다. 딱히 종교적인 느낌을 받았던 것 같지는 않다.
경북대학교 컴퓨터 동아리인 하늘소에서 만든 터미널 에뮬레이터인 이야기 5.3을 이용했다. 나중에 윈도를 쓰면서 새롬 데이타맨으로 갈아타기 전까지 계속 썼다.
가끔 Windows 3.1을 썼다. 지뢰찾기 말고 뭘 했는지 잘 기억이 나지 않는다. 윈도 프로그래밍을 공부했더라면 좋았을텐데 도스에 너무 깊게 빠져 있었다. 좋은 기회였는데 아쉽다. 당시 윈도는 아직 독립된 운영체제가 아니었고 DOS에서 실행하는 응용프로그램이었다. Windows 98까지도 이런 형태로 이어지다가 Windows 2000부터 드디어 DOS 없이 독립적으로 부팅이 되는 형태를 갖춘다.
1994년
중학교 3학년.
PowerBASIC을 쓰기 시작했다. QuickBASIC과 달리 무거운 런타임 라이브러리를 필요로 하지 않았고, 다양한 메모리 모델을 지원했으며(QuickBASIC은 MEDIUM 모델만 지원), 코드 포인터를 쓸 수 있었고(QuickBASIC은 데이터 포인터만 가능), 인라인 어셈블리를 지원했다(MASM은 아니고 TASM이었는데 큰 차이는 없었다). 덕분에 효율적인 램상주 프로그램을 만들 수 있었고 코드의 성능을 개선하며 많은 시간을 보냈다. 다만 알고리즘의 계산복잡도에 대한 개념은 하나도 없었고 그냥 주먹구구 식으로 했던 게 아쉽다.
이 무렵 헝가리안 표기법을 열심히 쓰고 있었고, 구조적 프로그래밍을 어느 정도 체득했던 것 같다. 물론 그런 용어들(헝가리안 표기법, 구조적 프로그래밍)은 몰랐다. 의존성에 대한 개념도 약하게 있었지만 순환 의존성을 피해야한다는 건 나중에 책을 보고야 알게 됐다.
PC 통신 서비스 나우누리에 가입했고, 공개자료실에서 MS-DOS 인터럽트 서비스 루틴 목록과 BIOS 인터럽트 서비스 루틴 목록을 다운로드 받아서 공부했었다(Ralf Brown’s Interrupt List). 이때부터 공부를 하기에 좋은 환경이 갖춰졌던 것 같은데, 공부보다는 게임을 더 많이 했던 것 같다.
MS-DOS는 두 종류의 실행 파일을 지원했는데 하나는 EXE
이고 다른 하나는 COM
이다. COM
은 헤더도 없고 아무 것도 없이 그냥 내용 전체를 메모리에 그대로 올린 다음에 인스트럭션 포인터를 보내버리는 방식으로 작동한다. 내가 만들었던 가장 짧은 프로그램(바이너리 기준)은 int 19h
를 호출하는 2 bytes COM
코드였다. 실행하면 컴퓨터가 POST를 건너뛰고 빠르게 재부팅된다.
나우누리 모뎀플레이 모임 “나모모”에서 둠2 네트워크 플레이를 자주 했다. 2위까지 올라갔었다. 당시에 누군가가 비싼 장비를 사비로 구입해서 동시에 4인이 접속할 수 있는 전화망을 운영했었는데 지연(latency)이 심해서 FPS를 원활하게 플레이 할 수는 없었다. 덕분에 모뎀 및 시리얼 케이블 프로그래밍에 관심이 생겼다. RS232 케이블로 컴퓨터와 컴퓨터를 직접 연결하는 방법을 배웠고 컴퓨터를 들고 친구집에 놀러가서 네트워크 게임을 했다. 지연이 하나도 없어서 쾌적한 플레이를 할 수 있었다. 당시에 이런저런 공부를 하다가 16550 UART 책을 사서 읽었던 기억이 난다. 돌이켜보면 당시에 이런 책의 번역서가 있었던 게 신기하다.
전화 요금이 많이 나왔고 보호자에게 종종 혼났다.
이 즈음 볼 마우스가 잘 안 움직이게 되었다. 마우스를 뒤집어서 트랙볼을 빼고 안을 살펴보니 두 롤러(X축 롤러, Y축 롤러)에 검은 띠 같은 게 코팅되어 있었는데 이게 낡아서 벗겨지려고 하고 있었다. 이게 문제라고 생각해서 코딩이 벗겨지지 않게 극도로 조심했었다. 나중에 알고 보니 이건 낡은 코딩이 아니라 롤러에 낀 때였다. 코팅인줄 알았던 때를 벗겨내자 다시 잘 작동했다.
대기업에 다니던 친척형을 졸라서 비주얼 베이직 불법복사본을 구했는데 열심히 뭘 하지는 않았다.
1995년
고등학교 1학년. 서울 용문고등학교.
학교 특활반으로는 이번에도 컴퓨터반을 골랐다. 컴퓨터반 담당 선생님이 HTML이라는 게 있다고 알려주신 덕에 웹에 대해 처음 알게 되었다. 그때 SGML 스타일의 마크업 언어를 처음 봤는데, 문법이 대단히 이상하다고 생각했던 기억이 난다. 지금 돌이켜보면 그렇게 이상하게 여길 이유도 없었는데. 당시에 나는 웹을 별로 대단치 않게 생각했고 깊게 공부해보지 않았다.
특활반 선배 한 명이 MINIX(Andrew S. Tanenbaum)라는 걸 알려줬다. 나도 공부를 잠깐 해봤는데 큰 흥미를 느끼지 못했다. 도스에 너무 깊게 빠져있었다. 좋은 기회였는데 아쉽다.
대학생이 된 형이 알려준 |공룡책(유명한 컴파일러론 개론서)을 꾸역꾸역 읽었다. 각종 이론으로 무장한 기사가 컴파일러 설계라는 공룡이랑 싸우는 표지였다. 이산수학이나 형식 언어 등 필요한 선수 과목을 공부하지 않았으니 제대로 이해하지 못했지만 꾸역꾸역 읽었다. 그래도 이때 공부한 게 이후에도 꾸준히 도움이 되었다. 형은 인하대 컴퓨터 공학과였고 인컴이라는 동아리에서 활동했는데 당시에 황병선씨가 있었다. 황병선씨는 공룡책의 공동 역자이기도 했다.
뿌요뿌요를 재미있게 했다. 친구랑 뿌요뿌요 게임 대회에 같이 나갔는데(동대문에서 열렸던 걸로 기억한다) 예선에서 탈락했다. 몇 승 이상을 해야만 본선에 진출할 수 있었고 사람이 너무 많았기 때문에 무조건 새치기를 해서 게임을 많이 해야만 하는 이상한 방식으로 예선이 운영됐다. 우리는 새치기를 안했고 필요한 승수를 채우지 못해서 본선에 못갔다. 그치만 본선에 가봤자 별 좋은 성적이 나왔을 것 같지는 않다.
나모모에서 듀크누켐 3D를 많이 했다. 지금 생각해보면 여성혐오로 가득한 게임이었다. 그래도 둠과 듀크누켐 덕분에 모딩(modding)을 열심히 했고, 프로그램을 어떻게 설계해야 유연한지에 대해 많이 알게 됐다. 영어로 된 기술 문서 읽기에도 약간은 익숙해질 수 있었다. 커스텀 맵을 만들었는데 기획에 대한 감이 하나도 없어서 겉보기에 멋있게 만들거나 온갖 기교(각종 트리거과 텍스처의 신기한 조합 등)를 넣는 일에 집중했었다. 당연히 내가 만든 맵은 인기가 없었다.
어느 수업시간에 몰래 듀크누켐 모딩에 대한 문서를 읽고 있다가 선생님한테 걸렸는데, 영어로 된 기술 문서를 읽는다며 칭찬을 하고 계속 읽도록 허락해줬다. 당시에는 우쭐한 기분이 들었는데 지금 생각해보니 영어를 읽는다고 칭찬할 게 아니라 능동적으로 공부를 한다며 칭찬을 해줬으면 더 좋았을 것 같다.
야간자율학습(“야간”만 맞고 모든 게 잘못된 말이다) 시간에도 몰래 컴퓨터 공부를 했다.
1996년
고등학교 2학년.
혜화동에 “인터넷 카페”라는 공간이 생겼다. 깔끔한 인테리어의 카페였고, 웹에 접속된 컴퓨터가 있었다. 프린터가 있어서 인쇄도 할 수 있었다. 시간당 요금을 받았던 걸로 기억한다. 이때부터 집에서도 PPP로 웹에 종종 접속하기 시작했다. Netscape Navigator를 썼다. 당시 Internet explorer 3.0은 애매한 브라우저였다.
남의 아이디를 빌려 하이텔을 쓰기 시작했다. 문화비평동호회(반문동)의 진화-창조 토론 게시판을 재미있게 읽었다. 불가사리(이종원님)과 magie(류성원님)의 글을 좋아했는데 나중에 생각해보니 불가사리님의 글은 지나치게 공격적이었고 상대를 심하게 조롱하는 면이 있었던 것 같다. 나도 한동안 이런 스타일의 논쟁을 흉내냈다.
학교 축제 때 나는 두 가지 전시를 기획했고 근처 학교들에서 약간 입소문이 났더랬다(뿌듯).
- Duke Nukem 3D 맵 편집기로 돈암동 지하철역을 만들었고 스테레오비전 렌더링 기능을 활용해서 3D 체험 데모를 전시했다. (Duke Nukem을 구매하지 않았으니 저작권 침해)
- X-Files 웹 사이트를 몽땅 다운로드받아서 학교 컴퓨터에서
file://
프로토콜로 브라우징할 수 있게 하여 “인터넷 체험” 전시를 했다. (이것도 저작권 침해)
인생 첫 사기를 당했다. 종이 문서를 컴퓨터로 옮겨 적는 아르바이트였다. 아르바이트를 하려면 분당 1000타 이상이 나와야하는데 그러려면 특수 키보드를 사야한다고 했다. 결국 키보드 비싸게 팔아먹는 사기였다. 이모부가 따라가서 설명을 들었는데, 이모부도 속아서 결국 키보드를 사고 말았다. 초성용 자음과 종성용 자음이 따로 있어서 한 번에 여러 키를 누르는 방식(예를 들어 “안”을 입력하려면 초성 “ㅇ”, 중성 “ㅏ” 종성 “ㄴ”을 한 번에 누름)이었고, 자주 입력하는 토큰은 단축키가 있었다(예를 들어 “ㄱㅅㅓㅏ”를 한 번에 누르면 “감사합니다”가 입력됨).
중학교때부터 만들어오던 라이브러리가 있었는데 하드디스크가 깨지면서 날라갔다. 당시에 무척 아쉬웠지만 다른 한편으로는 그 덕분에 도스 프로그래밍을 그만둘 수 있었던 것 같다. 남들은 윈도 프로그래밍을 하는데 나만 DOS에서 어셈블리를 한다는 게 시대에 뒤쳐진다는 느낌을 받았다. 이제라도 앞서 가자는 생각에 당시 최신 기술이었던 자바 공부를 시작했다. 당시엔 영어 문서 읽기가 익숙치 않아서 “잠탱이 3인방”이라는 사람들이 쓴 한국어 튜토리얼을 읽었던 기억이 난다. 검색을 해보니 아직도 그 문서가 떠돌아다닌다. 3인방은 신정호, 제갈영, 조국님이라고 한다. (세 분 모두 감사합니다.)
나는 원래 새로운 기술을 빠르게 수용하는 성향이 아니었는데 라이브러리 분실 사건을 계기로 소위 ‘기술 힙스터’ 성향으로 바뀐 게 아닌가 싶다. ‘빠른 수용과 다양한 탐험’이 좋은 전략인지 여부는 상황에 따라 다를텐데(Exploration-exploitation dilemma), 인간은 나이가 먹을수록 보수화되는 경향이 있다고 하니 요즘에는 의도적으로라도 힙스터 성향을 유지하려고 노력하는 편이다.
1997년
고등학교 3학년.
“자바 퀵 레퍼런스”(Java in a nutshell의 번역서)을 읽으며 드디어 자바에 익숙해졌다. JDK 1.1 시절이었다. “맥시멈 자바”라는 책도 당시에 내가 필요로하던 내용들이 많이 담겨 있어서 유익했다.
하이텔 자바동호회에서 결성된 스터디모임에 나가서 대학생 형들과 공부를 했다. 그 중 두 사람과는 아직도 가끔 교류를 하고 있다. AWT와 Swing 등 주로 GUI 프로그래밍을 공부했다. 아직 자바 애플릿이 망하기 전의 일이다.
하이텔 인공지능 동호회에 어렵지만 재미있는 글들이 많이 올라왔다. “지능에 대한 계산표상적 관점(computational-representational theory of mind)“이라는 말이 멋있어서 무슨 말인지도 모르면서 꾸역꾸역 읽었던 기억이 난다.
PC방이라는 게 여기저기 생기기 시작했다.
나는 고대 앞에 새로 생긴 “도깨비 PC방”에서 야간 아르바이트를 하고 낮에는 학교에서 거의 잤다. 당시 PC방이 도입되던 초창기라서 제도나 문화가 정착되기 전이었다. 초창기엔 카페인지 오락실인지 애매한 느낌의 업소들이 좀 있었는데 도깨비 PC방은 대형 모니터를 구비하는 등 본격적으로 게임에 특화한 업소였다. 먹거리는 음료만 있어서 알바 하기가 편했다. 요즘과 마찬가지로 시간제였지만 당구장마냥 빨간 버튼을 누르면 모니터가 꺼지면서 시간을 일시 정지할 수 있었다. 모두가 자리에서 담배를 피웠고 재떨이를 갈아주는 게 제일 큰 일 중 하나였다. PC방이 뭔지 잘 알려지지 않은 시기라서 경찰들이 야간에 순찰을 돌다가 몇 번 들어와서 퇴폐 업소나 불법 도박장이 아닌지 확인하곤 했다.
중학교때부터 꾸준히 학교 수업에는 전혀 관심이 없었는데 참 아쉽다. 수학, 역사, 지리, 철학, 윤리학, 물리학, 화학, 생물학 공부를 열심해 해두지 않은 점이 특히 아쉽다.
이 시기 즈음에 기존 PC 통신 서비스 제공자들이 이런저런 인터넷 전략을 발표하기 시작했던 것 같다. 여러 회사들이 자사 브랜드의 브라우저를 만들었는데 아마 렌더링 엔진을 구현했을 것 같지는 않고, 인터넷 익스플로러 wrapper가 아니었나 싶다.
1998년
20살. 사회생활 1년차.
학교 공부를 안했으니 당연히 수능 점수가 형편없었고 대학도 못갔다. 어차피 돈도 없었고 장학금을 받을 실력도 아니었다.
1월인가 2월에 하이텔 자바동호회 세미나에 나갔다가 개발자를 구하러 온 작은 회사 사장님을 알게 되어 우연히 취직했다. 월급은 20만원. 당시 기준으로도 노동법 위반인 것 같다. 작은 웹 호스팅 업체였고 10만원~20만원 정도 가격에 작은 회사들의 홈페이지를 만들어줬다. 직원은 나 혼자였다. 일주일에 한 번 정도 퇴근했고 거의 회사에서 살았다. 빨래 문제만 아니었으면 퇴근을 안해도 됐을텐데.
HTML, CSS, CGI, TCP/IP 등을 익힐 수 있었고, 자바 애플릿 프로그래밍을 많이 했었다. 덕분에 인터페이스 디자인에 관심을 가지게 됐고 이후에 Flash, RIA, Ajax를 거쳐 본격적으로 HCI와 UX 디자인을 공부할 수 있게 됐다. 시기에 따라 서버 프로그래밍에 빠지기도 했는데 아무래도 굳이 하나를 고르자면 사용자와 가까이에 닿아 있는 쪽이 좀 더 재미있는 것 같다.
회사에 취직하기 전까지는 TCP/IP 프로그래밍을 공부하려면 컴퓨터가 두 대 이상 있어야만 한다고 생각했었는데, 막상 취직해서 컴퓨터가 여러 대 있는 환경에서 공부를 해봤더니 그게 아니더라. 어떤 공부를 하려면 뭔가가 준비되어 있어야만 한다는 믿음은 사실이 아닐 가능성이 크다는 걸 배웠다.
UML과 RUP에 관심이 생겼다. 아마 하이텔 자바 동호회의 영향이었던 것 같다. 처음 읽은 책은 Martin Fowler의 UML distilled였다.
Windows 98이 나왔는데 인터넷 익스플로러와 운영체제가 긴밀하게 통합된 형태였다. 데스크탑 인터페이스를 웹 브라우저 인터페이스와 통일시키려고 노력을 많이 했던 것 같다. 데스크탑이나 탐색기에서 아이콘을 싱글 클릭하면 열린다거나, 온갖 UI에 “주소창”이 생겼다거나, “뒤로가기” 버튼이 곳곳에 추가된 점 등. 참고로 당시는 Netscape Navigator 점유율이 낮아지고 있었고, 마이크로소프트는 “브라우저 끼워팔기” 전략으로 인해 반독점법 위반 소송에 직면해 있던 시기다. 나도 IE 4.0이 나온 시점부터 NN 대신 IE를 쓰기 시작했다. 넷스케이프는 이 시기에 코드 대부분을 오픈소스 라이선스로 공개했고, 오픈소스 기반 모질라 프로젝트가 시작된다.
6개월 쯤 뒤에 회사를 그만두고 집에서 제일 가까운 회사를 검색해서 두번째 취직을 했다. 웹 호스팅 겸 SI를 하던 업체였고, Classic ASP를 주로 썼었다. Windows NT 4.0, IIS 3.0.
당시에 전자상거래가 유행하기 시작했고, 이 회사에서도 웹 기반 카드 결제 솔루션을 만들려고 애쓰던 시기였다. 내가 입사하던 당시 이 회사는 ASP로 해당 기능을 구현하다가 무언가에 막혀서 고생하고 있었다. 나는 ASP를 하나도 몰랐지만 CGI랑 베이직에 익숙했던 덕에(Classic ASP는 VBA라는 BASIC 기반 스크립팅 언어와 JScript라는 자바스크립트 기반 스크립팅 언어를 지원했는데, 대부분은 VBA를 썼다) 문제를 쉽게 해결할 수 있었고 그 덕에 “천재 소년”이라는 별명을 얻게 됐다.
근데 생각해보면 문제가 많았다.
- 디자인팀 팀장님이 여성이라는 이유로 매일 사장님 재떨이를 비워야했고, 안비우면 사장님 엄마(우리는 그분을 이사님이라고 불렀다)한테 혼이 났다. 나는 당시에 전혀 문제라고 인식하지 못했다.
- 어느 날은 고객에게 급히 CD-ROM을 전달할 일이 생겨서 밤에 병원 응급차를 이용해서 배달을 했었다(불법이다). 사장님의 아버지가 병원 원장님이었고 회사는 병원 뒷마당(?)에 있는 작은 건물에 있었으며 응급차를 회사 업무에 간혹 썼던 것 같다. 역시나 당시에는 전혀 문제라고 인식하지 못했다.
- 회사에서 사장님이랑 스타크래프트를 열심히 했다. 어떤 날은 업무 시간에도 하기도 했는데 다른 직원들은 일을 하고 있었다. 스타크래프트를 즐기는 직원들만 사장님의 “이너써클”에 들어갈 수 있었다. 희미하게 문제 의식이 있었지만 입 밖으로 꺼내지 않았다.
이 무렵 UML과 RUP에 관심이 생겼다. 아마 하이텔 자바 동호회의 영향이었던 것 같다.
김어준의 딴지일보가 창간되었다. 당시엔 푹 빠져서 재밌게 읽었다. 그 뒤 아주 오랜 세월 김어준의 팬이었는데, 2015년에야 정신을 차렸다.
김영삼 정권 말기에 “IMF 사태”가 일어났고(1997년), 김대중 정부는 출범 직후 뉴딜 정책의 일환으로 IT 산업에 대대적인 투자를 시작한 시기였다(1998년). 당시에 다양한 기회가 있었을텐데 아무런 전략도 없이 산업의 변두리(영세한 웹 호스팅 업체, 영세한 SI 업체 등)에 있었던 게 아쉽다.
AI가 엄청나게 발전하고 있는 지금(2025년 기준)도 어쩌면 비슷할텐데 나는 여전히 별 전략 없이 변두리에 있는 것 같다. 당시에는 나이도 어렸고 정보 채널도 부족했고 등등의 핑계라도 있는데 지금은 핑계도 없다. 돈 욕심이 없는건가? 그건 아닌데.
1999년
21살. 2년차.
“외계인책”을 보며 CORBA 공부를 열심해 했었다. 당시엔 CORBA와 자바 애플릿 조합이 은하계 간 네트워크를 완성해줄 수 있을거라는 꿈에 부풀어 있었다. 당시에는 아직 Netscape Navigator가 망하기 전이었고 자바 애플릿은 가능성이 있는 기술이었다.
모 출판사에 파견 나가서 처음으로 MS-SQL 6.5를 다뤄봤다. 초반에는 PK도 모르고, 정규화에 대해서도 몰라서 DB를 엉망으로 설계했었는데, 프로젝트 하는 도중에 점차 배워서 개선했다. 기획은 해당 출판사 IT팀의 웹마스터였던 김OO님이 했고 구현은 혼자 했다. 2000년엔가 “대한민국 인터넷대상”을 받았는데 당시 아무 일도 안했던 IT팀 팀장님(이OO)만 신문에 나왔다. 팀장님은 업무 시간에 종종 나에게 스타크래프트를 가르쳐달라고 했고 같이 몇 시간 동안 게임을 하기도 했다. 그래놓고 퇴근 시간이 되면 나한테 “일 얼마나 했냐?”고 물어봤다. 야근 하라는 소리다.
큰 사고가 두 번 있었다.
- 트랜잭션 개념을 몰랐어서 데이터 정합성이 깨진 일이 있었다.
- 주문 테이블과 주문행 테이블 중 주문행 테이블을 통으로 날린 적이 있었다. 결국 여러 직원들이 고객 한명 한명에게 전화를 해서 뭘 주문했는지 다 확인을 해야 했다.
해당 출판사에서 일할 때 좋았던 점은 내가 만든 소프트웨어의 사용자가 같은 건물에 있었다는 사실이었다. 쇼핑몰 사이트였기 때문에 관리자 기능도 만들었는데, 주문 처리 및 고객 지원을 담당하는 분이랑 종종 이야기를 나눌 수 있었고, 불편한 점을 개선해주거나 필요하다고 얘기하는 기능을 추가해주면 아주 기뻐하셨더랬다. 그렇게 기분이 좋을 수가 없었다. 그 전까지 내가 프로그래밍을 하면서 느꼈던 즐거움은 대부분 “퍼즐 풀이의 즐거움” 같은 것이었는데, 실제 사용자가 좋아하는 모습을 보는 종류의 즐거움은 새롭고 강렬했다.
진화론에 푹 빠져서 지냈다. 이기적 유전자의 영향도 있었지만 하이텔 반문동의 영향도 컸고, 무엇보다도 chopin님 사이트의 영향이 가장 컸다. chopin(정성영님)은 당시에 인공생명, 진화신경망 등을 주제로 여러 독자 연구를 하며 그 경과를 홈페이지에 공유하고 있었다. 심리철학을 주제로 짧은 단편 소설도 종종 쓰셨는데 The mind’s I 만큼이나 재미있었다.
진화 알고리즘을 써서 오목 두는 방법을 스스로 학습하는 프로그램을 주먹구구로 만들어서 집에 있는 컴퓨터에서 돌려봤다. 서서히 좋아지고 있었는데 학습 속도가 너무 느렸다. 아무런 이론적 지식도 없이 마구 만들었기 때문에 더더욱 될리가 없었는데 그냥 오래 실행하면 뭔가 될거라고 막연히 믿었더랬다. 그래도 아무 규칙도 모르고 시작한 개체들 중에서 가로로 한줄로 놓는 패턴, 세로로 한줄로 놓는 패턴, 대각선으로 한줄로 놓는 패턴, 상대방이 연속으로 놓지 못하게 방해하는 패턴 등을 구사하는 개체들이 진화하는 정도까지는 봤다.
다양한 실험을 하던 중 돌연변이율 자체가 변할 수 있도록 설정했던 적도 있다. 모든 개체군의 돌연변이율이 0이 되면서 진화가 멈추는 걸 관찰했다. 생각해보면 당연한데 겪어보니 깊은 울림이 있었던 것 같다.
진화론에 대한 흥미와 HCI에 대한 흥미가 몇 년 후에 스티븐 핑커의 책들을 읽으며 언어학과 진화심리학에 대한 관심으로 이어진 것 같다. 한동안 진화심리학에 푹 빠져 지냈는데, 2000년대 후반부터 체화된 인지를 공부하며 조금씩 생각이 바뀌게 됐다.
아무래도 고전적 인지주의의 영향을 많이 받은 진화심리학은 신경가소성이 낮음을 보여주는 사례나 유전자의 영향이 높음을 보여주는 사례 등을 열심히 제시한다. 체화된 인지는 반대로 신경가소성이 높음을 보여주는 사례나 학습의 영향이 높음을 보여주는 사례 등을 열심히 제시한다. 덕분에 균형 잡힌 시각을 갖출 수 있게 된 것 같다. 요즘은 시대가 시대이니만큼 마음이 체화된 인지 쪽으로 좀 더 기울어진 것 같다(체화된 인지의 연구 전통은 인공신경망과 잘 이어진다).
2000년
22살. 3년차.
H모 회사에서 불꽃놀이용 폭죽을 영업하기 위해 사용할 ‘불꽃놀이 시뮬레이터’를 만들었다. AWS/Swing을 썼었다. 물리 엔진을 만들거나 쓰지는 않았고 ‘겉보기에’ 비슷하게 보이게 만들려고 했었다. 지금 생각해보면 The Nature of Code의 입자 시뮬레이션보다도 못한 수준.
인천에 있는 화약 공장에 가서 실제로 폭죽을 만드는 전문가랑 이야기를 나눌 수도 있었다. 미국이 한국의 화약 사용량을 모니터링하고 있으며 불꽃놀이용 폭죽 제조에 쓰인 화약도 보고를 해야한다는 사실을 알게 됐다. 애자일 방법론 관련 서적에서 실제 고객과의 대화를 강조하는 내용을 접할때면 이 시기의 경험을 떠올리곤 한다.
당시에 종로에 있는 H사 건물에 파견을 나가서 일을 했는데 내가 자주 지각을 하는 게 불만이었던 H사 부장님이 나를 관리하던 H사 대리님을 나와 함께 불러서 세워놓고 대리님에게 폭언을 하며 폭행을 가했었다.
국방부 자료를 암복호화하는 프로젝트도 했었다. 1급 기밀은 아니고 2급 기밀이었던 걸로 기억한다. “격리된 공간”에서 작업을 해야했기 때문에 회사에 가벽을 만들고 창문을 암막 커튼으로 가려놓고 격리됐다고 우겼다. 작업을 하는 내내 국방부에서 나온 사람이 옆에서 감시(?)를 하고 있었는데 맨날 졸았다. 작업이 끝나면 하드 디스크를 분리해서 가져가고 다음날 다시 가져오는 식이었다. 당시에 한국어로 쓰인 암호학 입문서가 있어서 급히 공부해서 구현을 했는데 문제가 많았을 게 분명하다. 애초에 내가 해서는 안될 프로젝트였다. 그치만 덕분에 암호학의 주요 개념들을 공부할 수 있었다. 다만 정수론을 몰라서 개별 알고리즘을 깊게 이해할 수는 없었다.
누구나 쉽게 홈페이지를 만들 수 있게 해주겠다는 컨셉의 모 대기업 서비스에서 사용할 FTP 서버를 만들었다. 광고를 요란하게 했더랬다(물론 광고에 FTP라는 용어가 나오지는 않았다). 처음으로 RFC를 읽어가며 프로그램을 만들었다(RFC 959). FTP 서버를 만들어보고 나서야 표준을 준수하지 않는 클라이언트들이 엄청나게 많다는 걸 실감하게 됐다. 이 프로젝트 덕분에 RFC 읽기에 익숙질 수 있었고 네트워크 프로그래밍, 스레드 제어 등의 경험을 쌓을 수 있었다. 다만 JDK 1.1에는 아직 non-blocking I/O가 추가되기 전이라서(nio
는 JDK 1.4에 추가된다) 서버 한 대에서 수용 가능한 동시 연결 수에 제약이 많았다.
이 프로젝트는 서버가 윈도였기 때문에 표준 JDK 대신 마이크로소프트에서 자바 플랫폼을 망칠 목적(“Embrace, extend, and extinguish” 전략)으로 출시한 Visual J++라는 혼종을 썼다. VJ++은 상당히 좋았는데 특히 GUI 프레임워크인 “Windows Foundation Classes”가 훌륭했다. WFC는 곧 “Next Generation Windows Services”를 거쳐 .NET 프레임워크의 WinForm으로 발전한다. 그 밖에도 COM 지원 등 윈도 환경과 잘 통합되는 점이 좋았다.
서버를 설치하러 용산 근처에 있는 해당 회사 빌딩에 갔었는데 내가 혼자 다 만들었다는 사실을 듣더니 스카웃 제의를 했더랬다. 옮기지는 않았다.
이 시기에는 영어로 된 기술 문서를 부담없이 읽을 수 있게 됐다. 하지만 논문을 찾아 읽을 생각은 하지 못했고 기술 외의 다른 분야(철학, 역사 등)의 글은 한참 더 지나서야 사전 없이 읽을 수 있게 됐다.
당시에 소리바다라는 P2P 기반 음원 다운로드 프로그램이 유행했다(불법이었다). 나도 P2P 개념에 꽂혀서 회사에서 남는 시간에 P2P 파일 공유 프로그램을 만들고 있었는데 출시를 하지는 못했다. 참고로 미국의 Napster (P2P 음원 공유 프로그램)나 SETI@Home (Berkeley에서 개발한 P2P 외계 신호 분석 프로그램)은 모두 1999년에 출시됐다. 당시에 P2P가 세계적으로 유행이었던 모양이다.
2001년
벤처 열풍, 세번째 회사, 위키, 애자일 방법론, 노스모크.
2002년
테스트 주도 개발, 르네상스 클럽, 독서 기록 시작, 논문 읽기 시작
2003년
네번째 회사, 병역특례, 파이썬, 정적 타입 시스템에 대한 선호도가 낮아지기 시작.
2004년
꾸준히 독서하고 논문 읽기, 개인 위키에 열심히 기록. Firefox 1.0 출시.
2005년
Ajax 프로젝트, 인공생명 프로토타입, 진화심리학 공부 모임, 성균관대 이정모 교수님을 뵙고 체화된 인지에 대해 알게 됐으나 당시엔 부정적이었음.
2006년
BarCamp Seoul (Selenium을 이용한 웹 애플리케이션 테스트 자동화 발표), XP 컨설팅, WYSIWYG 편집기 개발
2007년
WYSIWYG 편집기 개발 계속, 산타클라라 AJAX 컨퍼런스 참석 등.